home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / lynx-2.4 / WWW / Library / Implementation / HTVMS_WaisProt.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-28  |  12.9 KB  |  377 lines

  1. /*                            HTVMS_WAISProt.h
  2. **
  3. **    Adaptation for Lynx by F.Macrides (macrides@sci.wfeb.edu)
  4. **
  5. **    31-May-1994 FM    Initial version.
  6. **
  7. **----------------------------------------------------------------------*/
  8.  
  9. /*
  10. **    Routines originally from WProt.h -- FM
  11. **
  12. **----------------------------------------------------------------------*/
  13. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  14.    No guarantees or restrictions.  See the readme file for the full standard
  15.    disclaimer.    
  16.   
  17.    3.26.90    Harry Morris, morris@think.com
  18.    3.30.90  Harry Morris 
  19.                -    removed chunk code from WAISSearchAPDU,
  20.                -    added makeWAISQueryType1Query() and readWAISType1Query() which
  21.                    replace makeWAISQueryTerms() and makeWAISQueryDocs().
  22.    4.11.90  HWM - added definitions of wais element set names
  23.    4.14.90  HWM - changed symbol for relevance feedback query from QT_3 to 
  24.                      QT_RelevanceFeedbackQuery added QT_TextRetrievalQuery as a
  25.                      synonym for QT_BooleanQuery
  26.                 - renamed makeWAISType1Query() to makeWAISTextQuery()
  27.                   renamed readWAISType1Query() to readWAISTextQuery()
  28.    5.29.90  TS - added CSTFreeWAISFoo functions
  29. */
  30.  
  31. #ifndef _H_WAIS_protocol_
  32.  
  33. #define _H_WAIS_protocol_
  34.  
  35. /*----------------------------------------------------------------------*/
  36. /* Data types / constants */
  37.  
  38. /* date factor constants */
  39. #define    DF_INDEPENDENT        1
  40. #define DF_LATER        2
  41. #define DF_EARLIER        3
  42. #define DF_SPECIFIED_RANGE    4
  43.  
  44. /* chunk types */
  45. #define CT_document        0
  46. #define CT_byte            1
  47. #define CT_line            2
  48. #define CT_paragraph    3
  49.  
  50. /* relevance feedback query */
  51. #define QT_RelevanceFeedbackQuery    "3"
  52. #define QT_TextRetrievalQuery        QT_BooleanQuery
  53.  
  54. /* new data tags */
  55. #define DT_UserInformationLength    (data_tag)99
  56. #define    DT_ChunkCode            (data_tag)100
  57. #define    DT_ChunkIDLength        (data_tag)101
  58. #define    DT_ChunkMarker            (data_tag)102
  59. #define    DT_HighlightMarker        (data_tag)103
  60. #define    DT_DeHighlightMarker        (data_tag)104
  61. #define    DT_NewlineCharacters        (data_tag)105
  62. #define    DT_SeedWords            (data_tag)106
  63. #define    DT_DocumentIDChunk        (data_tag)107
  64. #define    DT_ChunkStartID            (data_tag)108
  65. #define    DT_ChunkEndID            (data_tag)109
  66. #define    DT_TextList            (data_tag)110
  67. #define    DT_DateFactor            (data_tag)111
  68. #define    DT_BeginDateRange        (data_tag)112
  69. #define    DT_EndDateRange            (data_tag)113
  70. #define    DT_MaxDocumentsRetrieved    (data_tag)114
  71. #define    DT_SeedWordsUsed        (data_tag)115
  72. #define    DT_DocumentID            (data_tag)116
  73. #define    DT_VersionNumber        (data_tag)117
  74. #define    DT_Score            (data_tag)118
  75. #define    DT_BestMatch            (data_tag)119
  76. #define    DT_DocumentLength        (data_tag)120
  77. #define    DT_Source            (data_tag)121
  78. #define    DT_Date                (data_tag)122
  79. #define    DT_Headline            (data_tag)123
  80. #define    DT_OriginCity            (data_tag)124
  81. #define    DT_PresentStartByte        (data_tag)125
  82. #define    DT_TextLength            (data_tag)126
  83. #define    DT_DocumentText            (data_tag)127
  84. #define    DT_StockCodes            (data_tag)128
  85. #define    DT_CompanyCodes            (data_tag)129
  86. #define    DT_IndustryCodes        (data_tag)130
  87.  
  88. /* added by harry */
  89. #define DT_DocumentHeaderGroup        (data_tag)150
  90. #define DT_DocumentShortHeaderGroup    (data_tag)151
  91. #define DT_DocumentLongHeaderGroup    (data_tag)152
  92. #define DT_DocumentTextGroup        (data_tag)153
  93. #define DT_DocumentHeadlineGroup     (data_tag)154
  94. #define DT_DocumentCodeGroup        (data_tag)155
  95. #define DT_Lines                    (data_tag)131 
  96. #define    DT_TYPE_BLOCK                (data_tag)132
  97. #define DT_TYPE                        (data_tag)133
  98.  
  99. /* wais element sets */
  100. #define ES_DocumentHeader        "Document Header"
  101. #define ES_DocumentShortHeader    "Document Short Header"
  102. #define ES_DocumentLongHeader    "Document Long Header"
  103. #define ES_DocumentText            "Document Text"
  104. #define ES_DocumentHeadline        "Document Headline"
  105. #define ES_DocumentCodes        "Document Codes"
  106.  
  107. typedef struct DocObj { /* specifies a section of a document */
  108.     any*    DocumentID;
  109.     char*   Type;
  110.     long    ChunkCode;
  111.     union {
  112.         long    Pos;
  113.         any*    ID;
  114.     } ChunkStart;
  115.     union {
  116.         long    Pos;
  117.         any*    ID;
  118.     } ChunkEnd;
  119.     } DocObj;
  120.     
  121. /*----------------------------------------------------------------------*/
  122. /* WAIS APDU extensions */
  123.  
  124. typedef struct WAISInitResponse {
  125.     long                ChunkCode;
  126.     long                ChunkIDLength;
  127.     char*                ChunkMarker;
  128.     char*                HighlightMarker;
  129.     char*                 DeHighlightMarker;
  130.     char*                NewlineCharacters;
  131.     /* XXX  need to add UpdateFrequency and Update Time */
  132.     } WAISInitResponse;
  133.  
  134. typedef struct WAISSearch {
  135.     char*                SeedWords;
  136.     DocObj**            Docs;
  137.     char**                TextList;
  138.     long                DateFactor;
  139.     char*                BeginDateRange;
  140.     char*                EndDateRange;
  141.     long                MaxDocumentsRetrieved;
  142.     } WAISSearch;
  143.  
  144. typedef struct WAISDocumentHeader {
  145.     any*                DocumentID;
  146.     long                VersionNumber;
  147.     long                Score;     
  148.     long                BestMatch; 
  149.     long                DocumentLength;
  150.     long                 Lines;
  151.     char**                Types;
  152.     char*                Source;
  153.     char*                Date;
  154.     char*                Headline;
  155.     char*                OriginCity;
  156.     } WAISDocumentHeader;
  157.  
  158. typedef struct WAISDocumentShortHeader {
  159.     any*                DocumentID;
  160.     long                VersionNumber;
  161.     long                Score;     
  162.     long                BestMatch; 
  163.     long                DocumentLength;
  164.     long                 Lines;
  165.      } WAISDocumentShortHeader;
  166.  
  167. typedef struct WAISDocumentLongHeader {
  168.     any*                DocumentID;
  169.     long                VersionNumber;
  170.     long                Score;     
  171.     long                BestMatch; 
  172.     long                DocumentLength;
  173.     long                 Lines;
  174.     char**                Types;
  175.     char*                Source;
  176.     char*                Date;
  177.     char*                Headline;
  178.     char*                OriginCity;
  179.     char*                StockCodes;
  180.     char*                 CompanyCodes;
  181.     char*                IndustryCodes;
  182.      } WAISDocumentLongHeader;
  183.  
  184. typedef struct WAISDocumentText {
  185.     any*                DocumentID;
  186.     long                VersionNumber;
  187.     any*                DocumentText;
  188.     } WAISDocumentText;
  189.     
  190. typedef struct WAISDocumentHeadlines {
  191.     any*                DocumentID;
  192.     long                VersionNumber;
  193.     char*                Source;
  194.     char*                Date;
  195.     char*                Headline;
  196.     char*                OriginCity;
  197.     } WAISDocumentHeadlines;
  198.     
  199. typedef struct WAISDocumentCodes {
  200.     any*                DocumentID;
  201.     long                VersionNumber;
  202.     char*                StockCodes;
  203.     char*                CompanyCodes;
  204.     char*                IndustryCodes;
  205.     } WAISDocumentCodes;
  206.     
  207. typedef struct WAISSearchResponse {
  208.     char*                           SeedWordsUsed;
  209.     WAISDocumentHeader**         DocHeaders;
  210.     WAISDocumentShortHeader**     ShortHeaders;
  211.     WAISDocumentLongHeader**     LongHeaders;
  212.     WAISDocumentText**            Text;
  213.     WAISDocumentHeadlines**        Headlines;
  214.     WAISDocumentCodes**            Codes;
  215.     diagnosticRecord**            Diagnostics;
  216.     } WAISSearchResponse;
  217.  
  218. /*----------------------------------------------------------------------*/
  219. /* Functions */
  220.  
  221. DocObj* makeDocObjUsingWholeDocument _AP((any* aDocID,char* type));
  222. DocObj* makeDocObjUsingBytes _AP((any* aDocID,char* type,long start,long end));
  223. DocObj* makeDocObjUsingLines _AP((any* aDocID,char* type,long start,long end));
  224. DocObj* makeDocObjUsingParagraphs _AP((any* aDocID,char* type,any* start,any* end));
  225. void freeDocObj _AP((DocObj* doc));
  226.  
  227. WAISInitResponse* makeWAISInitResponse _AP((long chunkCode,long chunkIDLen,
  228.                         char* chunkMarker,char* highlightMarker,
  229.                         char* deHighlightMarker,char* newLineChars));
  230. void freeWAISInitResponse _AP((WAISInitResponse* init));
  231.  
  232. WAISSearch* makeWAISSearch _AP((
  233.     char* seedWords,DocObj** docs,char** textList,
  234.     long dateFactor,char* beginDateRange,char* endDateRange,
  235.     long maxDocsRetrieved));
  236. void freeWAISSearch _AP((WAISSearch* query));
  237.  
  238. WAISDocumentHeader* makeWAISDocumentHeader _AP((
  239.     any* aDocID,long versionNumber,long score,long bestMatch,long docLen,
  240.     long lines,char** types,char* source,char* date,char* headline,char* originCity));
  241. void freeWAISDocumentHeader _AP((WAISDocumentHeader* header));
  242. char* writeWAISDocumentHeader _AP((WAISDocumentHeader* header,char* buffer,long* len));
  243. char* readWAISDocumentHeader _AP((WAISDocumentHeader** header,char* buffer));
  244.  
  245. WAISDocumentShortHeader* makeWAISDocumentShortHeader _AP((
  246.     any* aDocID,long versionNumber,long score,long bestMatch,long docLen,long lines));
  247. void freeWAISDocumentShortHeader _AP((WAISDocumentShortHeader* header));
  248. char* writeWAISDocumentShortHeader _AP((WAISDocumentShortHeader* header,
  249.                                    char* buffer,long* len));
  250. char* readWAISDocumentShortHeader _AP((WAISDocumentShortHeader** header,char* buffer));
  251.  
  252. WAISDocumentLongHeader* makeWAISDocumentLongHeader _AP((
  253.     any* aDocID,long versionNumber,long score,long bestMatch,long docLen,
  254.     long lines,char** types,char* source,char* date, char* headline,char* originCity,
  255.     char* stockCodes,char* companyCodes,char* industryCodes));
  256. void freeWAISDocumentLongHeader _AP((WAISDocumentLongHeader* header));
  257. char* writeWAISDocumentLongHeader _AP((WAISDocumentLongHeader* header,char* buffer,long* len));
  258. char* readWAISDocumentLongHeader _AP((WAISDocumentLongHeader** header,char* buffer));
  259.  
  260. WAISSearchResponse* makeWAISSearchResponse _AP((
  261.     char* seedWordsUsed,WAISDocumentHeader** docHeaders,
  262.     WAISDocumentShortHeader** shortHeaders,
  263.     WAISDocumentLongHeader** longHeaders,
  264.     WAISDocumentText** text,WAISDocumentHeadlines** headlines,
  265.     WAISDocumentCodes** codes,
  266.     diagnosticRecord** diagnostics));
  267. void freeWAISSearchResponse _AP((WAISSearchResponse* response));
  268.  
  269. WAISDocumentText* makeWAISDocumentText _AP((any* aDocID,long versionNumber,
  270.                        any* documentText));
  271. void freeWAISDocumentText _AP((WAISDocumentText* docText));
  272. char* writeWAISDocumentText _AP((WAISDocumentText* docText,char* buffer,long* len));
  273. char* readWAISDocumentText _AP((WAISDocumentText** docText,char* buffer));
  274.  
  275. WAISDocumentHeadlines* makeWAISDocumentHeadlines _AP((
  276.     any* aDocID,long versionNumber,char* source,char* date,char* headline,
  277.     char* originCity));
  278. void freeWAISDocumentHeadlines _AP((WAISDocumentHeadlines* docHeadline));
  279. char* writeWAISDocumentHeadlines _AP((WAISDocumentHeadlines* docHeadline,char* buffer,long* len));
  280. char* readWAISDocumentHeadlines _AP((WAISDocumentHeadlines** docHeadline,char* buffer));
  281.  
  282. WAISDocumentCodes* makeWAISDocumentCodes _AP((
  283.     any* aDocID,long versionNumber,char* stockCodes,char* companyCodes,
  284.     char* industryCodes));
  285. void freeWAISDocumentCodes _AP((WAISDocumentCodes* docCodes));
  286. char* writeWAISDocumentCodes _AP((WAISDocumentCodes* docCodes,char* buffer,long* len));
  287. char* readWAISDocumentCodes _AP((WAISDocumentCodes** docCodes,char* buffer));
  288.  
  289. any* makeWAISTextQuery _AP((DocObj** docs));
  290. DocObj** readWAISTextQuery _AP((any* terms));
  291.  
  292. void CSTFreeWAISInitResponse _AP((WAISInitResponse* init));
  293. void CSTFreeWAISSearch _AP((WAISSearch* query));
  294. void CSTFreeDocObj _AP((DocObj* doc));
  295. void CSTFreeWAISDocumentHeader _AP((WAISDocumentHeader* header));
  296. void CSTFreeWAISDocumentShortHeader _AP((WAISDocumentShortHeader* header));
  297. void CSTFreeWAISDocumentLongHeader _AP((WAISDocumentLongHeader* header));
  298. void CSTFreeWAISSearchResponse _AP((WAISSearchResponse* response));
  299. void CSTFreeWAISDocumentText _AP((WAISDocumentText* docText));
  300. void CSTFreeWAISDocumentHeadlines _AP((WAISDocumentHeadlines* docHeadline));
  301. void CSTFreeWAISDocumentCodes _AP((WAISDocumentCodes* docCodes));
  302. void CSTFreeWAISTextQuery _AP(( any* query));
  303.  
  304. /*----------------------------------------------------------------------*/
  305.  
  306. #endif /* ndef _H_WAIS_protocol_ */
  307.  
  308.  
  309. /*
  310. **    Routines originally from WMessage.h -- FM
  311. **
  312. **----------------------------------------------------------------------*/
  313. /* WIDE AREA INFORMATION SERVER SOFTWARE
  314.    No guarantees or restrictions.  See the readme file for the full standard
  315.    disclaimer.    
  316.    3.26.90
  317. */
  318.  
  319. /* wais-message.h
  320.  *
  321.  * This is the header outside of WAIS Z39.50 messages.  The header will be
  322.  * printable ascii, so as to be transportable.  This header will precede each
  323.  * Z39.50 APDU, or zero-length message if it is an ACK or NACK.  Be sure to
  324.  * change hdr_vers current value if you change the structure of the header.
  325.  *
  326.  * The characters in the header are case insensitive so that the systems from
  327.  * the past that only handle one case can at least read the header.
  328.  *
  329.  * 7.5.90 HWM - added constants
  330.  * 7/5/90 brewster added funtion prototypes and comments
  331.  * 11/30/90 HWM - went to version 2 (inits and typed retrieval)
  332.  */
  333.  
  334. #ifndef WMESSAGE_H
  335. #define WMESSAGE_H
  336.  
  337. typedef struct wais_header {
  338.         char    msg_len[10];    /* length in bytes of following message */
  339.         char    msg_type;       /* type of message: 'z'=Z39.50 APDU,
  340.                                    'a'=ACK, 'n'=NACK */
  341.         char    hdr_vers;       /* version of this header, currently = '2' */
  342.         char    server[10];     /* name or address of server */
  343.         char    compression;    /* <sp>=no compression, 'u'=unix compress */
  344.         char    encoding;       /* <sp>=no encoding, 'h'=hexize, 
  345.                    'u'=uuencode */
  346.         char    msg_checksum;   /* XOR of every byte of message */
  347.         } WAISMessage;
  348.  
  349. #define HEADER_LENGTH     25    /* number of bytes needed to write a 
  350.                    wais-header (not sizeof(wais_header)) */
  351.  
  352. #define HEADER_VERSION     (long)'2'
  353.  
  354. /* message type */
  355. #define Z3950            'z'  
  356. #define ACK            'a'  
  357. #define    NAK            'n'  
  358.  
  359. /* compression */
  360. #define NO_COMPRESSION         ' ' 
  361. #define UNIX_COMPRESSION     'u' 
  362.  
  363. /* encoding */
  364. #define NO_ENCODING        ' '  
  365. #define HEX_ENCODING    'h'  /* Swartz 4/3 encoding */
  366. #define IBM_HEXCODING    'i'     /* same as h but uses characters acceptable for IBM mainframes */
  367. #define UUENCODE        'u'  
  368.  
  369.  
  370. void readWAISPacketHeader _AP((char* msgBuffer,WAISMessage *header_struct));
  371. long getWAISPacketLength _AP((WAISMessage* header));
  372. void writeWAISPacketHeader _AP((char* header,long dataLen,long type,
  373.                 char* server,long compression,    
  374.                 long encoding,long version));
  375.  
  376. #endif /* ndef WMESSAGE_H */
  377.